跳转至

一维数组

新建数组

新建数组(不分配内存)的两种方式

int[] a; // 推荐
int b[];

新建数组且分配内存的两种方式

int[] a = new int[100];
int b[] = new int [100];

新建数组且初始化的三种方式

int[] a = {1, 2, 3};
int a[] = {1, 2, 3};
int[] a = new int[] {1, 2, 3};

// 注意,不能先 new 再初始化
// int[] a = new int[3];
// a = {1, 2, 3}; 是错误的写法

数组越界

Java 数组越界,会被 JVM 抛出异常 ArrayIndexOutOfBoundsException

Java 的 for-each 循环

对于数组 a,可以这样遍历,类似 C++11

for (int i : arr) {
  // blabla
}

数组的 copy

Java 中,数组名字其实是一个指针,指向数组对应的内存区域
所以如果对于数组 a 和 b 执行赋值操作,实际上相当于把 b 的地址赋给 a

对于已经存在的 a b 两个数组,Java 中提供了 System.arraycopy() 可以用来方便地进行数组的 copy 操作
System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length),如

int[] arr1 = {1, 2, 3, 4, 5};
int[] arr2 = {6, 7, 8, 9, 0};
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
// 执行完毕后,arr2 也是 {1, 2, 3, 4, 5}

若已经存在 a 但不存在 b,希望用 a 的内容对 b 进行初始化,可以使用 Array.copyOf(src, len) 完成,如

int[] arr1 = {1, 2, 3};
int[] arr2 = Array.copyOf(arr1, arr1.length);

若想要使用 a 的全部内容初始化 b,可以直接使用 a.clone(),如

int[] arr1 = {1, 2, 3};
int[] arr2 = a.clone();

java.util.Arrays 当中的实用方法

  • Arrays.toString(arrName)
  • Arrays.sort(arrName)
  • Arrays.fill(name, val)
  • Arrays.equals(arr1, arr2)
  • Arrays.binarySearch(arrName, val)